package com.demo.job;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.demo.config.ApiConfig;
import com.demo.entity.SqlConfig;
import com.demo.tool.HttpUtilWrapper;
import com.demo.tool.SqlServerUtil;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.io.IOException;
import java.net.URL;
import java.util.List;

@Slf4j
@Component
public class commTask {


    @Resource
    private ApiConfig apiConfig;

    @Autowired
    private SqlServerUtil sqlServerUtil;


    /**
     * 从文件中获取 sql 配置
     */
    @Scheduled(fixedRate = 10000) // 每 10 秒执行一次（单位为毫秒）
    public void getDataByConfigFile() {
        log.info("开始执行定时任务");
        // 使用类加载器获取资源路径
        URL resourceUrl = getClass().getClassLoader().getResource("jsonsql/sql.json");
        if (resourceUrl == null) {
            log.error("无法找到 SQL 配置文件: jsonsql/sql.json");
            return;
        }

        // 创建 ObjectMapper 实例
        ObjectMapper objectMapper = new ObjectMapper();

        try {
            // 读取 JSON 文件并解析为 List<SqlConfig>
            List<SqlConfig> sqlConfigs = objectMapper.readValue(resourceUrl.openStream(), new TypeReference<List<SqlConfig>>() {
            });

            // 遍历解析后的数据
            for (SqlConfig config : sqlConfigs) {
//               log.info("Name: {}, API: {}, SQL: {}", config.getName(), config.getApi(), config.getSql());
                // 在这里可以根据 SQL 配置执行数据库查询等操作
                String sql = config.getSql();
                String api = config.getApi();
                String name = config.getName();
                try {
                    //1.调用工具类，获取 JSON 格式的查询结果
                    String jsonResult = sqlServerUtil.executeQueryToJson(sql);
                    log.info("查询的json字符串是 : " + jsonResult);
                    JSONArray jsonArray = JSONArray.parseArray(jsonResult);

                    // 直接使用 jsonArray 中的第一个对象
                    JSONObject jsonObject = jsonArray.getJSONObject(0);
                    log.info("查询的json对象是 : " + jsonObject);

                    //2.提供API提交数据
                    String url = apiConfig.getBaseUrl() + api;
                    String response = HttpUtilWrapper.sendPostRequest(url, jsonObject);
                    log.info(name + " 运行结果: " + response);
                } catch (Exception e) {
                    log.error("执行 SQL 查询失败", e);
                }
            }
        } catch (IOException e) {
            log.error("读取或解析 JSON 文件失败", e);
        }
        log.info("执行定时任务结束");
    }
}


